/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.atp.agencia.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 *
 * @author Afonso
 */

    public class DateUtil {

        public static String formatoUS = "MM/dd/yyyy HH:mm";
        public static String formatoBR = "dd/MM/yyyy HH:mm";

        /**
         * Metodo para calcular a diferença de dias
         *
         * @param entrada
         * @param saida
         * @return diferença de dias int
         */
        public static int diff(Date entrada, Date saida) {

            int diffDay = 0;// inicializa e diferença
            entrada = retiraHoras(entrada); // retiro as horas para colcular apenas a diferença 
            saida = retiraHoras(saida);     // de dias, em outro momento trato as horas

            if (entrada.before(saida)) {
                diffDay = DiferencaDias(entrada, saida);
            } else {
                diffDay = DiferencaDias(saida, entrada);
            }

            return diffDay;
        }

        /**
         * Metodo que calcula a diferença de dias
         *
         * @param Data Inicial
         * @param Data Final
         * @return
         */
        private static int DiferencaDias(Date c1, Date c2) {

            int returnInt = 0;// variavel inteira para retorno
            long diff; // variavel para receber a diferença
            diff = c1.getTime() - c2.getTime(); // o metodo getTime retorna um long da data
            diff /= (1000 * 60 * 60 * 24); // transformo a difenreça de long milisegundos para dias inteiros.
            returnInt = (int) diff; // cast de conversão de long para int
            returnInt = (returnInt * -1); // o resultado vem negativo
            return (returnInt);
        }

        /**
         * Metodo para fazer o parse na data.
         *
         * @param dateString O metodo necessida que a String seje passada no formato
         * "MM/dd/yyyy HH:mm"
         * @return data em Date
         * @throws Exception
         */
        public static Date makeDate(String dateString) throws Exception {
            Date date;
            SimpleDateFormat formatter = new SimpleDateFormat(formatoBR);
            formatter.setLenient(false); // habilito a validação do formatter, caso for invalido ele estoura a exceção
            date = formatter.parse(dateString); // faz a conversão do String da tipo Date
            return date;
            //   }
        }

        /**
         * Metodo para transformar os cinco parametros inteiros referente a data em
         * Date
         *
         * @param dia
         * @param mes
         * @param ano
         * @param hora
         * @param minuto
         * @return String de data
         * @throws Exception conversão
         */
        public static Date makeDate(int dia, int mes, int ano, int hora, int minuto) throws Exception {
            String unida = "";
            unida = Integer.toString(mes) + "/"
                    + Integer.toString(dia) + "/"
                    + Integer.toString(ano) + " "
                    + Integer.toString(hora) + ":"
                    + Integer.toString(minuto) + "";
            return makeDate(unida);
        }

        /**
         * Metodo para retirar as horas da data
         *
         * @param data
         * @return Date de horas
         */
        private static Date retiraHoras(Date data) {
            Calendar cc1 = Calendar.getInstance();
            Calendar cc2 = Calendar.getInstance();
            cc1.setTime(data);
            cc2.set(cc1.get(Calendar.YEAR), cc1.get(Calendar.MONTH), cc1.get(Calendar.DATE));
            data = cc2.getTime();
            return data;
        }

        public static boolean isAposMeioDia(Date data) {
            int hora = 0;
            Calendar cc1 = Calendar.getInstance();
            cc1.setTime(data);
            hora = cc1.get(Calendar.HOUR_OF_DAY);
            if (hora >= PropriedadesSistema.getInicioDiaria()) {
                return true;
            }
            return false;
        }

        /**
         * Transforma um Date em String. Ele e necessario devido imprimios direto o
         * Date ele retorna em formato que hoje não e necessario (Sat Oct 15
         * 11:00:00 BRT 2011)
         *
         * @param data
         * @param formatoImpressao
         * @return String data
         */
        public static String getStringFromDate(Date data, String formatoImpressao) {
            if (data == null) {
                return null;
            }
            SimpleDateFormat format = new SimpleDateFormat(formatoImpressao);
            String strData = format.format(data);
            return strData;
        }
    }
